home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
101-125
/
scopedisk125
/
smarticon
/
src
/
window.c
< prev
Wrap
C/C++ Source or Header
|
1995-03-19
|
18KB
|
468 lines
#include "list.h"
#include <graphics/gfxmacros.h>
#include "menu.h"
#ifndef DEBUG
#include <proto/all.h>
#endif
USHORT chip is_PropEndData[] =
{
0x0000, 0x8000, /* ................#............... */
0x7ffe, 0x0000, /* .##############................. */
0x7ffe, 0x0000, /* .##############................. */
0x8000, 0x0000, /* #............................... */
0x0000, 0x0000, /* ................................ */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x2aaa, 0x8000, /* ..#.#.#.#.#.#.#.#............... */
};
USHORT chip is_PropArrowsData[] =
{
0x0000, 0x8000, /* ................#............... */
0x7ffe, 0x0000, /* .##############................. */
0x7ffe, 0x0000, /* .##############................. */
0x7e7e, 0x0000, /* .######..######................. */
0x7c3e, 0x0000, /* .#####....#####................. */
0x781e, 0x0000, /* .####......####................. */
0x7ffe, 0x0000, /* .##############................. */
0x7ffe, 0x0000, /* .##############................. */
0x0000, 0x0000, /* ................................ */
0x7ffe, 0x0000, /* .##############................. */
0x7ffe, 0x0000, /* .##############................. */
0x0000, 0x0000, /* ................................ */
0x7ffe, 0x0000, /* .##############................. */
0x7ffe, 0x0000, /* .##############................. */
0x781e, 0x0000, /* .####......####................. */
0x7c3e, 0x0000, /* .#####....#####................. */
0x7e7e, 0x0000, /* .######..######................. */
0x7ffe, 0x0000, /* .##############................. */
0x7ffe, 0x0000, /* .##############................. */
0x8000, 0x0000, /* #............................... */
0x0000, 0x0000, /* ................................ */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x0180, 0x8000, /* .......##.......#............... */
0x03c0, 0x8000, /* ......####......#............... */
0x07e0, 0x8000, /* .....######.....#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x07e0, 0x8000, /* .....######.....#............... */
0x03c0, 0x8000, /* ......####......#............... */
0x0180, 0x8000, /* .......##.......#............... */
0x0000, 0x8000, /* ................#............... */
0x0000, 0x8000, /* ................#............... */
0x2aaa, 0x8000, /* ..#.#.#.#.#.#.#.#............... */
};
/* === Read Only Data ================================================== */
static USHORT chip Close1Data[] =
{
0xffff, /* ################ */
0xc003, /* ##............## */
0xcff3, /* ##..########..## */
0xcff3, /* ##..########..## */
0xcff3, /* ##..########..## */
0xcff3, /* ##..########..## */
0xc003, /* ##............## */
0xffff, /* ################ */
0x0000, /* ................ */
0x3ffc, /* ..############.. */
0x300c, /* ..##........##.. */
0x300c, /* ..##........##.. */
0x300c, /* ..##........##.. */
0x300c, /* ..##........##.. */
0x3ffc, /* ..############.. */
0x0000, /* ................ */
};
static USHORT chip Close2Data[] =
{
0xffff, /* ################ */
0xc003, /* ##............## */
0xc3c3, /* ##....####....## */
0xcdb3, /* ##..##.##.##..## */
0xcdb3, /* ##..##.##.##..## */
0xc3c3, /* ##....####....## */
0xc003, /* ##............## */
0xffff, /* ################ */
0x0000, /* ................ */
0x3ffc, /* ..############.. */
0x3c3c, /* ..####....####.. */
0x324c, /* ..##..#..#..##.. */
0x324c, /* ..##..#..#..##.. */
0x3c3c, /* ..####....####.. */
0x3ffc, /* ..############.. */
0x0000, /* ................ */
};
static USHORT chip Depth1Data[] =
{
0xffff, /* ################ */
0xc03f, /* ##........###### */
0xcf3f, /* ##..####..###### */
0xcc03, /* ##..##........## */
0xc003, /* ##............## */
0xfc03, /* ######........## */
0xfc03, /* ######........## */
0xffff, /* ################ */
0x0000, /* ................ */
0x3fc0, /* ..########...... */
0x30c0, /* ..##....##...... */
0x33fc, /* ..##..########.. */
0x3ffc, /* ..############.. */
0x03fc, /* ......########.. */
0x03fc, /* ......########.. */
0x0000, /* ................ */
};
static USHORT chip Depth2Data[] =
{
0xffff, /* ################ */
0xc03f, /* ##........###### */
0xc03f, /* ##........###### */
0xc003, /* ##............## */
0xc0f3, /* ##......####..## */
0xfcf3, /* ######..####..## */
0xfc03, /* ######........## */
0xffff, /* ################ */
0x0000, /* ................ */
0x3fc0, /* ..########...... */
0x3fc0, /* ..########...... */
0x3ffc, /* ..############.. */
0x3f0c, /* ..######....##.. */
0x030c, /* ......##....##.. */
0x03fc, /* ......########.. */
0x0000, /* ................ */
};
static USHORT chip SizeData[] =
{
0xfcff, /* ######..######## */
0xf3ff, /* ####..########## */
0xccff, /* ##..##..######## */
0x30ff, /* ..##....######## */
0xffff, /* ################ */
0x0300, /* ......##........ */
0x0c00, /* ....##.......... */
0x3300, /* ..##..##........ */
0xcf00, /* ##..####........ */
0x0000, /* ................ */
};
static struct Image Close1 = { 0,0, 16,8, 2, Close1Data, 0x03,0x00, NULL };
static struct Image Close2 = { 0,0, 16,8, 2, Close2Data, 0x03,0x00, NULL };
static struct Image Depth1 = { 0,0, 16,8, 2, Depth1Data, 0x03,0x00, NULL };
static struct Image Depth2 = { 0,0, 16,8, 2, Depth2Data, 0x03,0x00, NULL };
static struct Gadget SystemGadgets[] =
{
{ &SystemGadgets[1], -19, 1, 16, 8, GRELRIGHT | GADGIMAGE | GADGHCOMP, RELVERIFY,
SYSGADGET | WUPFRONT, (APTR)&Depth1, NULL, NULL, NULL, NULL, 0, NULL },
{ &SystemGadgets[2], -39, 1, 16, 8, GRELRIGHT | GADGIMAGE | GADGHCOMP, RELVERIFY,
SYSGADGET | WDOWNBACK, (APTR)&Depth2, NULL, NULL, NULL, NULL, 0, NULL },
{ NULL, 4, 1, 16, 8, GADGIMAGE | GADGHIMAGE, RELVERIFY,
SYSGADGET | CLOSE, (APTR)&Close1, (APTR)&Close2, NULL, NULL, NULL, 0, NULL },
};
struct Border st_LRBorder[] =
{
{ 0, 0, BLACK, 0, JAM1, 4, NULL, NULL }, /* Window Border */
{ 0, 0, BLACK, 0, JAM1, 5, NULL, NULL }, /* Window Border */
{ 0, 0, BLUE, 0, JAM1, 2, NULL, NULL }, /* Prop left border */
};
struct Box st_LRBox[] =
{
{ NULL, 1, 0, 0,10, BLACK, BLACK, WHITE, 0, NULL, NULL }, /* Title */
/*
{ NULL, 0,0, 62,13, BLUE, WHITE, BLACK, BLACK, "Cancel", BOX_SHADING },
{ NULL, 17,0, 62,13, YELLW, WHITE, BLACK, BLACK, "Ok", BOX_SHADING },
*/
{ NULL, 0,0, 0, 0, BLUE, WHITE, 0, BLACK, "", BOX_SHADING } /* Display background */
};
struct Image st_LRImage[] =
{
{ 0,0, 17, 4, SYSPLANES, is_PropEndData, 0x03, 0x00, NULL },
{ 0,0, 17,20, SYSPLANES, is_PropArrowsData, 0x03, 0x00, NULL },
{ 0,0, 17, 4, SYSPLANES, is_PropEndData, 0x03, 0x00, NULL },
};
struct Gadget st_LRGadget[FILEIO_GADGETS] =
{
{ NULL, 0,0, 0,10, GRELWIDTH | GADGHNONE, TOPBORDER,
SYSGADGET | WDRAGGING, NULL, NULL, NULL, NULL, NULL, NULL, NULL, },
{ NULL, 19,0, 58,11, GADGHCOMP, RELVERIFY,
BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_CANCEL, NULL, },
{ NULL, 19,0, 58,11, GADGHCOMP, RELVERIFY,
BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_OK, NULL, },
{ NULL, 0,0, 14,7, GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_UPGADGET, NULL, },
{ NULL, 0,0, 14,7, GADGHCOMP, GADGIMMEDIATE | RELVERIFY,
BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_DOWNGADGET, NULL, },
{ NULL, 0,0, 10,0, GADGIMAGE | GADGHNONE, GADGIMMEDIATE | RELVERIFY | FOLLOWMOUSE,
PROPGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_PROPGADGET, NULL, },
{ NULL, OPENSELECT_LEFT,OPENSELECT_TOP, 0,0, GADGHNONE, GADGIMMEDIATE,
BOOLGADGET, NULL, NULL, NULL, NULL, NULL, OPENGADGET_SELECTNAME, NULL, },
};
struct NewWindow st_LRnw =
{
0,0,
0,0,
BLUE, WHITE,
GADGETUP | GADGETDOWN | MOUSEMOVE | CLOSEWINDOW | MENUPICK,
BORDERLESS | SMART_REFRESH | ACTIVATE | NOCAREREFRESH,
NULL,
NULL,
NULL,
NULL,
NULL,
0,0,
0,0,
WBENCHSCREEN,
};
struct TextAttr LRSafeFont = { (UBYTE *)"topaz.font", TOPAZ_EIGHTY, 0, 0 };
struct IntuiText st_LROpenSelectText = { 3, WHITE, JAM2, 1, 0, &LRSafeFont, NULL, NULL, };
struct Image st_LRPropImage = { 1, 0, 8, 0, SYSPLANES, NULL, 0x00, WHITE, NULL, };
UBYTE LRDefaultReqTitle[] = "iSup Lists Requester";
USHORT LR_Pattern[] = /* { 0x7f7f, 0x3f3f, 0xdfdf, 0xffff, 0xfdfd, 0xf9f9, 0xf7f7, 0xffff };*/
{
0x7b9c, /* .####.###..###.. */
0xda7b, /* ##.##.#..####.## */
0x3327, /* ..##..##..#..### */
0xe5af, /* ###..#.##.#.#### */
0x5eac, /* .#.####.#.#.##.. */
0xd96a, /* ##.##..#.##.#.#. */
0x6b6b, /* .##.#.##.##.#.## */
0x1de7, /* ...###.####..### */
};
BOOL
ls_AllocateData(list)
register struct ListSupport *list;
{
register USHORT i;
SHORT d_width, d_height, width, height;
d_width = (list->MaxChars-1)*8 + 6;
d_height = list->MaxLines*OPEN_LINEHEIGHT;
width = d_width + 45;
height = d_height + 12 + 14;
if ( !(list->OpenSelectText = New(struct IntuiText, list->MaxLines))
|| !(list->LRBorder = New(struct Border, FILEIO_BORDERS))
|| !(list->LRBox = New(struct Box, FILEIO_BOXES))
|| !(list->LRImage = New(struct Image, FILEIO_IMAGES))
|| !(list->LRGadget = New(struct Gadget, FILEIO_GADGETS))
)
{
ls_DeleteData(list);
return(FALSE);
}
CopyMem(st_LRBorder, list->LRBorder, sizeof(struct Border)*FILEIO_BORDERS);
for(i=1; i<FILEIO_BORDERS; i++) list->LRBorder[i].NextBorder = &list->LRBorder[i-1];
CopyMem(st_LRBox, list->LRBox, sizeof(struct Box)*FILEIO_BOXES);
for(i=1; i<FILEIO_BOXES; i++) list->LRBox[i].NextBox = &list->LRBox[i-1];
CopyMem(st_LRImage, list->LRImage, sizeof(struct Image)*FILEIO_IMAGES);
for(i=1; i<FILEIO_IMAGES; i++) list->LRImage[i].NextImage = &list->LRImage[i-1];
for(i=0; i<FILEIO_BORDERS; i++)
if ( !(list->LRBorder[i].XY = New(SHORT, list->LRBorder[i].Count*2)) )
{
ls_DeleteData(list);
return(FALSE);
}
list->LRBorder[0].XY[0] = list->LRBorder[0].XY[2] = 1;
list->LRBorder[0].XY[1] = list->LRBorder[0].XY[7] = 10;
list->LRBorder[0].XY[3] = list->LRBorder[0].XY[5] = height-1;
list->LRBorder[0].XY[4] = list->LRBorder[0].XY[6] = width-2;
list->LRBorder[1].XY[0] = list->LRBorder[1].XY[1] =
list->LRBorder[1].XY[2] = list->LRBorder[1].XY[7] =
list->LRBorder[1].XY[8] = list->LRBorder[1].XY[9] = 0;
list->LRBorder[1].XY[3] = list->LRBorder[1].XY[5] = height-1;
list->LRBorder[1].XY[4] = list->LRBorder[1].XY[6] = width-1;
list->LRBorder[2].XY[0] = list->LRBorder[2].XY[2] = width-34;
list->LRBorder[2].XY[1] = OPENSELECT_TOP-1;
list->LRBorder[2].XY[3] = OPENSELECT_TOP+d_height+4;
list->LRBox[0].Width = width-2;
/* list->LRBox[1].LeftEdge = width-81;
list->LRBox[1].TopEdge = list->LRBox[2].TopEdge = height - 17; */
list->LRBox[1].LeftEdge = OPENSELECT_LEFT-5;
list->LRBox[1].TopEdge = OPENSELECT_TOP-1;
list->LRBox[1].Width = d_width+29;
list->LRBox[1].Height = d_height+4;
if (list->ReqTitle) list->LRBox[0].Text = list->ReqTitle;
else list->LRBox[0].Text = LRDefaultReqTitle;
list->LRImage[0].LeftEdge = list->LRImage[1].LeftEdge = list->LRImage[2].LeftEdge = width-31;
list->LRImage[0].TopEdge = OPENSELECT_TOP+1;
list->LRImage[1].TopEdge = OPENSELECT_TOP+6;
list->LRImage[2].TopEdge = OPENSELECT_TOP+d_height-3;
CopyMem(st_LRGadget, list->LRGadget, sizeof(struct Gadget)*FILEIO_GADGETS);
for(i=2; i<FILEIO_GADGETS; i++) list->LRGadget[i].NextGadget = &list->LRGadget[i-1];
if ( !(list->LRGadget[OPENGADGET_PROPGADGET].SpecialInfo = (APTR)New(struct PropInfo, 1))
|| !(list->LRGadget[OPENGADGET_PROPGADGET].GadgetRender = (APTR)New(struct Image, 1))
)
{
ls_DeleteData(list);
return(FALSE);
}
OpenPropInfo->Flags = FREEVERT | PROPBORDERLESS;
Clone(&st_LRPropImage, OpenPropImage);
/* let's hide the Ok and Cancel gadgets below the big display */
list->LRGadget[1].TopEdge = list->LRGadget[2].TopEdge = height-20;
/* the others are visible and active */
list->LRGadget[3].LeftEdge = list->LRGadget[4].LeftEdge = width-30;
list->LRGadget[3].TopEdge = OPENSELECT_TOP+7;
list->LRGadget[4].TopEdge = OPENSELECT_TOP+18;
list->LRGadget[5].LeftEdge = width-28;
list->LRGadget[5].TopEdge = OPENSELECT_TOP+26;
list->LRGadget[5].Height = d_height-29;
list->LRGadget[6].Width = d_width;
list->LRGadget[6].Height = d_height;
for (i=0; i<list->MaxLines; i++)
{
Clone(&st_LROpenSelectText, &list->OpenSelectText[i]);
list->OpenSelectText[i].TopEdge = 1+(OPEN_LINEHEIGHT*i);
if (i) list->OpenSelectText[i].NextText = &list->OpenSelectText[i-1];
if (!(list->OpenSelectText[i].IText = New(UBYTE, list->MaxChars)))
{
ls_DeleteData(list);
return(FALSE);
}
}
return(TRUE);
}
VOID
ls_DeleteData(list)
register struct ListSupport *list;
{
register USHORT i;
SHORT d_height;
if (list->LRGadget)
{
CheckDelete(OpenPropInfo, 1);
CheckDelete(OpenPropImage, 1);
Delete(list->LRGadget, FILEIO_GADGETS);
}
if (list->LRBorder)
{
for(i=0; i<FILEIO_BORDERS; i++)
{
CheckDelete(list->LRBorder[i].XY, list->LRBorder[i].Count*2);
}
Delete(list->LRBorder, FILEIO_BORDERS);
}
CheckDelete(list->LRBox, FILEIO_BOXES);
CheckDelete(list->LRImage, FILEIO_IMAGES);
if (list->OpenSelectText)
{
for(i=0; i<list->MaxLines; i++)
CheckDelete(list->OpenSelectText[i].IText, list->MaxChars);
Delete(list->OpenSelectText, list->MaxLines);
}
}
BOOL ls_StartRequester(list, window, x, y)
struct ListSupport *list;
struct Window *window;
SHORT x, y;
{
SHORT width, height;
struct NewWindow *nw;
width = (list->MaxChars-1)*OPEN_LINEHEIGHT + 6 + 45;
height = list->MaxLines*OPEN_LINEHEIGHT + 12 + 14;
if (!(nw = New(struct NewWindow, 1))) return(FALSE);
Clone(&st_LRnw, nw);
/* if (window && FlagIsSet(list->Flags, LR_AUTO_CENTER))
{
x = window->LeftEdge + (window->Width - width)/2;
y = 10 + window->TopEdge + (window->Height-11 - height)/2;
} */
nw->LeftEdge = x;
nw->TopEdge = y;
nw->Width = width;
nw->Height = height;
/* nw->Screen = window? window->WScreen : IntuitionBase->FirstScreen;
is_BindWindowToScreen(nw); */
list->LRWindow = (struct Window *)OpenWindow(nw);
Delete(nw, 1);
if (!list->LRWindow) return(FALSE);
SetMenuStrip(list->LRWindow, &Menu1);
SetAPen (list->LRWindow->RPort, WHITE);
SetBPen (list->LRWindow->RPort, BLACK);
SetAfPt (list->LRWindow->RPort, LR_Pattern, 3);
RectFill(list->LRWindow->RPort, 0,0, list->LRWindow->Width-1, list->LRWindow->Height-1 );
SetAfPt (list->LRWindow->RPort, NULL, 0);
if (FlagIsClear(list->Flags, LR_DRAG_BAR_OFF))
AddGadget(list->LRWindow, &list->LRGadget[OPENGADGET_DRAG], (USHORT) ~0);
AddGList(list->LRWindow, &list->LRGadget[FILEIO_GADGETS-1], (USHORT) ~0, -1, 0);
DrawBox(list->LRWindow->RPort, &list->LRBox[FILEIO_BOXES-1], 0,0);
DrawBorder(list->LRWindow->RPort, &list->LRBorder[FILEIO_BORDERS-1], 0,0);
DrawImage (list->LRWindow->RPort, &list->LRImage[FILEIO_IMAGES-1], 0,0);
if (FlagIsClear(list->Flags, LR_GOOD_LISTNAMES)) ls_WarmStartFileIO(list);
else
{
list->OpenClickSeconds = list->OpenClickMicros = 0;
ls_InitOpenProp(list, TRUE);
ls_StuffSelectNames(list, 2);
}
return(TRUE);
}
VOID ls_EndRequester(list)
struct ListSupport *list;
{
if (!list) return;
if (list->LRWindow)
{
while (FlagIsSet( list->LRWindow->Flags, WINDOWREFRESH )) Delay( 10 ); /* if intuition use it */
ModifyIDCMP( list->LRWindow, NULL );
RemoveGList(list->LRWindow, &list->LRGadget[FILEIO_GADGETS-1], -1);
if (FlagIsClear(list->Flags, LR_DRAG_BAR_OFF))
RemoveGadget(list->LRWindow, &list->LRGadget[OPENGADGET_DRAG]);
ClearMenuStrip(list->LRWindow);
CloseWindow(list->LRWindow);
list->LRWindow = NULL;
}
}